# -*- coding: utf-8 -*-
"""
@Time    : 2024/9/13 15:12 
@Author  : ZhangShenao 
@File    : 3.静态方法.py 
@Desc    : 静态方法

在类中可以声明静态方法
静态方法与对象无关,而是属于这个类
可以使用@staticmethod声明静态方法
"""
from math import sqrt


class Triangle(object):
    """三角形类"""

    # 使用@staticmethod装饰器,声明静态方法
    # 静态方法与对象无关,它属于整个类
    @staticmethod
    def is_valid(x: float, y: float, z: float) -> bool:
        """静态方法:校验三边是否构成三角形"""

        return x + y > z and y + z > x and x + z > y

    def __init__(self, x: float, y: float, z: float):
        """
        构造方法
        :param x: X边长
        :param y: Y边长
        :param z: Z边长
        """
        self._x = x
        self._y = y
        self._z = z

    def perimeter(self) -> float:
        """计算周长"""
        return self._x + self._y + self._z

    def area(self) -> float:
        """计算面积"""
        half = self.perimeter() / 2
        return sqrt(half * (half - self._x) *
                    (half - self._y) * (half - self._z))


if __name__ == '__main__':
    x, y, z = 3.1, 4.1, 5.1

    # 调用静态方法
    # 可以通过类直接调用静态方法
    if not Triangle.is_valid(x, y, z):
        print("无法构成三角形!")
    else:
        # 创建三角形对象
        triangle = Triangle(x, y, z)
        print(f"三角形周长: {triangle.perimeter():.2f}, 三角形面积: {triangle.area():.2f}")
